﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Sinacor.Infra.UI.Controls.SmartClient;
using Sinacor.UI.Bovespa.Ordens.Presenter;
using Sinacor.UI.Bovespa.Ordens.Model;
using System.ComponentModel;
using Sinacor.Infra.UI.Common;
using PSE.Framework.UI.Resources;
using System.Collections.ObjectModel;
using Sinacor.UI.Bovespa.Ordens.Model.Enum;

namespace Sinacor.UI.Bovespa.Ordens.View.SmartClient
{
    /// <summary>
    /// Interaction logic for OrdensMegaBolsa.xaml
    /// </summary>
    public partial class OrdensMegaBolsa : SinacorWindow, IOrdensMegaBolsa
    {
        #region Variaveis de Classe
        private OrdensMegaBolsaPresenter _presenter;

        public OrdensMegaBolsaPresenter presenter {
            get { return _presenter; }
            set { _presenter = value; }        
        }


        private ModelOrdensMegaBolsa _model;

        private ModelItemOrdensMegaBolsa _anterior;


        #endregion

        public OrdensMegaBolsa()
        {
            InitializeComponent();

            this.ModuleId = "ORD";
            this.ModulePlus = false;

            grdOrdens.NewItemType = typeof(Model.ModelOrdensMegaBolsa);
            grdPreBoletos.NewItemType = typeof(Model.CasamentoPreBoleto);
            
            this.AfterInitialize += new RoutedEventHandler(OrdensMegaBolsa_AfterInitialize);
        }
        
        void OrdensMegaBolsa_AfterInitialize(object sender, RoutedEventArgs e)
        {
            this.presenter = new OrdensMegaBolsaPresenter(this);
            this.DataContext = this.presenter;
            this._model = new ModelOrdensMegaBolsa();

            this.CarregarEventos();
            this.presenter.CarregarDataMovimento();
            this.presenter.CarregarOperadores();
            this.presenter.CarregarCalendario();
        }



        private void CarregarEventos()
        {
            this.Closing += new System.ComponentModel.CancelEventHandler(OrdensMegaBolsa_Closing);
            this.buttonPreBoleto.Click += new RoutedEventHandler(buttonExibirBoleto_Click);
            this.datapikerPregao.LostFocus += new RoutedEventHandler(datapikerPregao_LostFocus);
            this.grdOrdens.UpdateBegun += new ItemEventHandler(grdOrdens_UpdateBegun);
        }



        private void CarregaPreBoletoAnalitico(ModelOrdensMegaBolsa model)
        {
 
                model.DataPregao = Convert.ToDateTime(comboPregao.SelectedValue);
                model.LinhaSelecionada = this.grdOrdens.SelectedItem;

                if (model.LinhaSelecionada != null)
                {
                    this.presenter.CarregarPreBoletosAnalitico(model);
                }
 
        }

        private void OrdensMegaBolsa_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            this.ConfirmarSalvar();
        }


        private void ConfirmarSalvar()
        {
            if (this.grdOrdens.ItemsSource != null)
            {
                //TODO:Verificar como vai fazer para atualizar essa linha
                List<Model.ModelItemOrdensMegaBolsa> updatedLine = ((ModelCollection<Model.ModelItemOrdensMegaBolsa>)this.grdOrdens.ItemsSource).GetUpdated().ToList();

                if (updatedLine != null && updatedLine.Count > 0)
                {

                    if (SinacorMessageBoxResult.Yes == SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.Message_Sair_Salvar"), SinacorMessageBoxImage.Question))
                    {
                        this.AlterarOrdemMegaBolsa(updatedLine);
                    }
                }
            }
        }

        public void buttonExibirBoleto_Click(object sender, RoutedEventArgs e)
        {
            this.CarregarTelaPreBoleto();
        }

        private void CarregarTelaPreBoleto()
        {
            Model.CasamentoPreBoleto model;
            
            object selectedItem = null;

                selectedItem = this.grdOrdens.SelectedItem;

                if (selectedItem == null)
                {
                    this.ExibirMensagem(Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.NenhumOrdemSelecionada);
                }
                else
                {
                    this._model.DataPregao = this.datapikerPregao.Value;
                    //20080422 16:21 - RValadao
                    //Verifica se é valido a data do pregão 
                    if (this.presenter.ValidarDataPregaoPreBoletoOrdem(this._model, selectedItem)) //alterado - esertorio - 200804281517 - ref issue ID0003686
                    {
                        //TODO:VERIFICAR SE EXISTE ESSA VERICICAÇÃO, JÁ QUE O REGISTRO É SALVO NA HORA
                        //this.ConfirmarSalvar();

                        model = new Model.CasamentoPreBoleto();
                        this.presenter.PrepararChamadaPreBoleto(this.grdOrdens.SelectedItem, ref model);

                        model.DataPregao = this.datapikerPregao.Value; //alterado - retirado (.Value) para passar nulo quando nao houver data - esertorio - 200805291914 - ref issue ID0004727

                        //if (model.DataPregao == DateTime.MinValue) //excluido - (DatePicker) deixou de retornar (DateTime.MinValue) quando vazio (ref INFRA) - esertorio - 200805291914 - ref issue ID0004727
                        if (!model.DataPregao.HasValue) //incluido - esertorio - 200805291914 - ref issue ID0004727
                            model.DataPregao = Convert.ToDateTime(this.comboPregao.SelectedValue);


                        CasamentoPreBoleto novaJanela = new CasamentoPreBoleto(model);
                        if (novaJanela.ExibirTela)
                        {
                            novaJanela.Owner = this;
                            novaJanela.SetMenuHeader("Bovespa.Ordens.Label.CasamentoPreBoleto");
                            novaJanela.ShowDialog();


                            this.CarregarOrdemMegaBolsa(this._model);
                        }
                        else
                        {
                            novaJanela.Close();
                        }
                    }
                }
            

                this.presenter.CarregarDataMovimento();
            
        }

        private void datapikerPregao_LostFocus(object sender, RoutedEventArgs e)
        {
            //20080425 11:15 - RValadao
            //Verificar se a data é válida
            if (datapikerPregao.Value.HasValue)
                this.ValidarDataPregaoPreBoletoOrdemMegaBolsa(this._model);
        }


        private void ValidarDataPregaoPreBoletoOrdemMegaBolsa(ModelOrdensMegaBolsa model)
        {
            object selectedItem = null;

                model.DataMovimento = datapikerPregao.Value.Value;

                selectedItem = this.grdOrdens.SelectedItem;

                if (selectedItem != null)
                {
                    this.presenter.ValidarDataPregaoPreBoletoOrdem(model, selectedItem);
                }
                else
                {
                    this.ExibirMensagem(Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.NenhumOrdemSelecionada);
                }

        }


        #region IOrdensMegaBolsa Members

        public void ExibirOperadores(System.Collections.IEnumerable operadores)
        {
                this.comboOperador.DisplayMemberPath = "NomeOperador";
                this.comboOperador.SelectedValuePath = "CodigoOperador";
                this.comboOperador.ItemsSource = operadores;
                this.comboOperador.SelectedIndex = -1;

 
        }

        public void ExibirCalendario(System.Collections.IEnumerable datas)
        {

                this.comboPregao.ItemsSource = datas;
                this.comboPregao.SelectedIndex = 0;
           
        }

        public void ExibirDataMovimento(DateTime data)
        {

                this._model.DataMovimento = data;
                this.datapikerPregao.Value = this._model.DataMovimento;
         
        }



        public void ExibirPreBoletosAnalitico()
        {
            this.grdPreBoletos.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }

        public void ExibirDadosCliente(Sinacor.UI.Bovespa.Ordens.Model.ModelOrdensMegaBolsa cliente)
        {
            if (cliente.IsBloqueado)
            {                
                ExibirMensagem(Model.Enum.Mensagem.ClienteBloqueado);
                this.grdOrdens.CancelUpdate();
            }
        }

        public void ExibirMensagem(Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem mensagem)
        {
            string mensagemAuxiliar = String.Empty;

            switch (mensagem)
            {
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.SalvocomSucesso:
                    mensagemAuxiliar = (string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MensageBox_PC_SalvocomSucesso").ToString();
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.NaoSalvo:
                    mensagemAuxiliar = (string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MensageBox_PC_NaoSalvo").ToString();
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.NenhumOrdemSelecionada:
                    mensagemAuxiliar = (string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_EscolherOrdem").ToString();
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.RegistroNaoEncontrado:
                    mensagemAuxiliar = (string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_RegistroNaoEncontrado").ToString();
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.RegistroNaoEncontradoPreBoleto:
                    mensagemAuxiliar = (string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_OMB_RegistroNaoEncontradoPreBoleto").ToString();
                    break;

                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.DataMovimentoInvalida:
                    mensagemAuxiliar = (string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_OMB_DataMovimentoInvalida").ToString();
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.TipoCarteiraIncorret:
                    mensagemAuxiliar = (string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_OMB_TipoCarteiraIncorreta").ToString();
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.TipoLiquidacaoIncorreta:
                    mensagemAuxiliar = (string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_OMB_TipoLiquidacaoIncorreta").ToString();
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.PercentualDescontoIncorreto:
                    mensagemAuxiliar = (string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_OMB_PercentualDescontoIncorreto").ToString();
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.ConsultaSemResultado:
                    mensagemAuxiliar = (string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.ConsultaSemResultado").ToString();
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.NenhumRegistrosParaSalvar:
                    mensagemAuxiliar = (string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_MO_NenhumRegistrosParaSalvar").ToString();
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.ClienteInexistente:
                    mensagemAuxiliar = (string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.MessageBox_MO_RegistroNaoEncontradoCliente").ToString();
                    break;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.ClienteBloqueado:
                    mensagemAuxiliar = (string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.ClienteBloqueado").ToString();
                    break;

            }

            if (!String.IsNullOrEmpty(mensagemAuxiliar))
            {
                SinacorMessageBox.Show(mensagemAuxiliar);
            }
        }

        public void ExibirMensagem(string mensagem)
        {
            if (!String.IsNullOrEmpty(mensagem))
            {
                SinacorMessageBox.Show(mensagem);
            }
        }

        private void AlterarOrdemMegaBolsa(List<Model.ModelItemOrdensMegaBolsa> updatedLine)
        {
            this.grdOrdens.SaveAll();

            this.presenter.AlterarOrdemMegaBolsa(updatedLine);
        }

        public void AlterarOrdemMegaBolsa(Sinacor.UI.Bovespa.Ordens.Model.ModelOrdensMegaBolsa modelMegaBolsa, Sinacor.UI.Bovespa.Ordens.Model.ModelItemOrdensMegaBolsa modelItemAnterior)
        {
            if (!string.IsNullOrEmpty(modelMegaBolsa.DescricaoBloqueio))
            {
                this.ExibirMensagem(modelMegaBolsa.DescricaoBloqueio);
                if (modelItemAnterior.ApelidoCliente == modelMegaBolsa.ApelidoCliente)
                {
                    this.ExibirMensagem(Sinacor.UI.Bovespa.Ordens.Model.Enum.Mensagem.SalvocomSucesso);

                }
                else
                {
                    //20080425 15:01 - RValadao
                    //Resgata o apelido e nome do cliente anterior
                    this.VoltarCliente(modelItemAnterior);
                }
            }
            else
            {
                if (!string.IsNullOrEmpty(modelMegaBolsa.MensagemValidacaoSaldo))
                {
                    this.ExibirMensagem(modelMegaBolsa.MensagemValidacaoSaldo);
                }
            }
        }

        private void FecharTelaModal()
        {
            //TODO:Fechar Tela Modal
            //pnlPopup.Visibility = Visibility.Hidden;
            //this.LimparCampos(pnlPopup);
        }


        public void ExibirOrdemPopup(Sinacor.UI.Bovespa.Ordens.Model.ModelOrdensMegaBolsa model)
        {
            throw new NotImplementedException();
        }

      

        public void ExibirOrdemMegaBolsa()
        {
            this.HabilitarCamposPesquisa(false);
            this.grdOrdens.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
            this.grdPreBoletos.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
            this.HabilitarCamposPesquisa(true);
        }

        private void HabilitarCamposPesquisa(bool condicao)
        {
            txtApelido.IsEnabled = condicao;
            txtOrdem.IsEnabled = condicao;
            txtPapel.IsEnabled = condicao;
            checkCanceladas.IsEnabled = condicao;
            comboOperador.IsEnabled = condicao;
            comboPregao.IsEnabled = condicao;
            groupNatureza.IsEnabled = condicao;
            btnBusca.IsEnabled = condicao;
        }

        private void NovaBusca()
        {
            this.comboPregao.SelectedIndex = 0;
            this.txtApelido.Text = null;
            this.txtOrdem.Text = null;
            this.txtPapel.Text = null;
            this.comboOperador.SelectedIndex = -1;
            this.rdbCasadas.IsChecked = false;
            this.rdbCasadasParte.IsChecked = false;
            this.rdbExecutadas.IsChecked = false;
            this.rdbNaoCasadas.IsChecked = false;
            this.rdbTodas.IsChecked = false;
            this.checkCanceladas.IsChecked = false;
            this.presenter.itensMegabolsa = null;
            this.ExibirOrdemMegaBolsa();
            this.presenter.CarregarDataMovimento();
        }

        #endregion

        private void btnBusca_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.ClearServiceErrors();
            this.CarregarOrdemMegaBolsa(this._model);
        }

        public void IniciarProcesso()
        {
            base.ShowUserWaitingProcess();
        }

        public void FinalizarProcesso()
        {
            base.HideUserWaitingProcess();
        }


        public void CarregarOrdemMegaBolsa(ModelOrdensMegaBolsa model)
        {
            TipoSituacaoOrdem tipoOrdem = TipoSituacaoOrdem.Todas;

                
                if (this.rdbCasadas.IsChecked == true)
                {
                    tipoOrdem = TipoSituacaoOrdem.Casadas;
                }
                else if (this.rdbCasadasParte.IsChecked == true)
                {
                    tipoOrdem = TipoSituacaoOrdem.CasadasParte;
                }
                else if (this.rdbExecutadas.IsChecked == true)
                {
                    tipoOrdem = TipoSituacaoOrdem.ExecutadasSemClientes;
                }
                else if (this.rdbNaoCasadas.IsChecked == true)
                {
                    tipoOrdem = TipoSituacaoOrdem.NaoCasadas;
                }

                model.ApelidoCliente = this.txtApelido.Text;
                model.Canceladas = this.checkCanceladas.IsChecked.Value;
                model.Titulo = txtPapel.Text;
                model.SituacaoOrdem = tipoOrdem;

                if (this.comboPregao.SelectedValue != null)
                    model.DataPregao = Convert.ToDateTime(this.comboPregao.SelectedValue);

                if (comboOperador.SelectedValue != null)
                {
                    model.Operador = Convert.ToInt32(comboOperador.SelectedValue);
                } else {
                    model.Operador = null;
                }

                if (this.txtOrdem.Text != "")
                    model.Numero = Convert.ToInt32(this.txtOrdem.Value);
                else
                    model.Numero = null;
                //20080417 19:42 - RValadao.7Comm
                //Limpar o dtgOrdem e dtgPreBoleto antes de realizar a pesquisa.
                //this.grdOrdens.ItemsSource = null;
                //this.grdPreBoletos.ItemsSource = null;

                this.presenter.CarregarOrdemMegaBolsa(model);
  
        }

        private void AlterarOrdem(ModelItemOrdensMegaBolsa modelItem)
        {
            //20080425 14:58 - RValadao
            //Guarda os valores antigos para, se necessário, resgatá-los
            ModelItemOrdensMegaBolsa modelItemAnterior = _anterior;

               //Chamada da função para alterar o item.
                this.presenter.AlterarItemOrdemMegaBolsa(modelItem, modelItemAnterior);


        }

        private void VoltarCliente(ModelItemOrdensMegaBolsa modelItemAnterior)
        {
            //ModelItemOrdensMegaBolsa itemSelecionado = (ModelItemOrdensMegaBolsa)this.grdOrdens.SelectedItem;

            //20080502 15:01 - RValadao
            //Resgata o apelido e nome do cliente anterior
            //if (!modelItemAnterior.CodigoCliente.Equals(0) && modelItemAnterior.CodigoCliente.HasValue)
            //{
            //    this.textUpdateApelido.Text = modelItemAnterior.ApelidoCliente;
            //    this.textUpdateNomeCliente.Text = modelItemAnterior.NomeCliente;
            //}
            //else
            //{
            //    //20080513 00:16 - RValadao
            //    //Limpa os campos caso o cliente tenha código zero.
            //    this.textUpdateApelido.Text = string.Empty;
            //    this.textUpdateNomeCliente.Text = string.Empty;
            //}
            //this.textUpdatePercentualReducaoAcrescim.Text = modelItemAnterior.PercentualReducaoAcrescimo.Value.ToString();
            //20080502 15:10 - RValadao
            //Devolve o valor para o grid
            ModelItemOrdensMegaBolsa itemSelecionado = (ModelItemOrdensMegaBolsa)this.grdOrdens.SelectedItem;
            itemSelecionado.ApelidoCliente = modelItemAnterior.ApelidoCliente;
            itemSelecionado.NomeCliente = modelItemAnterior.NomeCliente;
            itemSelecionado.PercentualReducaoAcrescimo = modelItemAnterior.PercentualReducaoAcrescimo;
        }


        private void grdOrdens_UpdateBegun(object sender, ItemEventArgs e)
        {
            if (e.OriginalSource is BaseRow)
            {
                _anterior = (ModelItemOrdensMegaBolsa)e.ItemInfo.Item;

                // Capturando combo da linha
                SinacorComboBox comboTipoLiquidacaoOrdem = ControlHelper.FindChild((BaseRow)e.OriginalSource, "comboTipoLiquidacaoOrdem") as SinacorComboBox;
                comboTipoLiquidacaoOrdem.ItemsSource = EnumWrapper<TipoLiquidacao>.GetEnums();

            }
        }



        private void btnSalvar_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.ClearServiceErrors();
            ModelItemOrdensMegaBolsa modelAtual = (ModelItemOrdensMegaBolsa)grdOrdens.SelectedItem;
            AlterarOrdem(modelAtual);
        }

        private void SinacorContextMenuItem_Click(object sender, RoutedEventArgs e)
        {
            this.CarregarTelaPreBoleto();
        }

        private void grdOrdens_EndingUpdate(object sender, CancelItemEventArgs e)
        {
            if (e.OriginalSource is BaseRow)
            {
                AlterarOrdem((ModelItemOrdensMegaBolsa)grdOrdens.EditItem);
            }
        }

        private void ValidarCarteiraOrdemMegaBolsa(SinacorInt32TextBox textUpdateCarteira)
        {

                ModelItemOrdensMegaBolsa selectedItem = (ModelItemOrdensMegaBolsa)grdOrdens.SelectedItem;

                bool blnValidar = this.presenter.ValidarCarteiraOrdensMegaBolsa(textUpdateCarteira.Value, selectedItem);
                if (!blnValidar)
                {
                    textUpdateCarteira.Text = selectedItem.Carteira.Value.ToString();
                }

        }

        private void textUpdateCarteira_LostFocus(object sender, RoutedEventArgs e)
        {
            //20080513 00:18 - RValadao - Busca valores da model da grid
            ModelItemOrdensMegaBolsa modelItem = (ModelItemOrdensMegaBolsa)grdOrdens.SelectedItem;
            SinacorInt32TextBox textUpdateCarteira = (SinacorInt32TextBox)sender;

            if (!string.IsNullOrEmpty(textUpdateCarteira.Text))
                if (modelItem.Carteira.Value != textUpdateCarteira.Value)
                {
                    this.ValidarCarteiraOrdemMegaBolsa(textUpdateCarteira);
                }
        }

        private void textUpdateApelido_LostFocus(object sender, RoutedEventArgs e)
        {
            SinacorTextBox textUpdateApelido = (SinacorTextBox)sender;

            //20080513 00:18 - RValadao - Busca valores da model da grid
            ModelItemOrdensMegaBolsa modelItem = (ModelItemOrdensMegaBolsa)grdOrdens.SelectedItem;
            if (modelItem.ApelidoCliente.Trim() != textUpdateApelido.Text.Trim())
                this.CarregarCliente(textUpdateApelido);
        }


        private void CarregarCliente(SinacorTextBox textUpdateApelido)
        {

                if (!this.presenter.CarregarCliente(textUpdateApelido.Text))
                {
                    this.grdOrdens.CancelUpdate();                       
                }

        }

        private void textUpdatePercentualReducaoAcrescim_LostFocus(object sender, RoutedEventArgs e)
        {
            SinacorDecimalTextBox textUpdatePercentualReducaoAcrescim = (SinacorDecimalTextBox)sender;

            //20080513 00:19 - RValadao
            //Verifica se foi informado valor para fazer validação do PercentualReducaoAcrescimo.
            if (!string.IsNullOrEmpty(textUpdatePercentualReducaoAcrescim.Text))
            {
                ModelItemOrdensMegaBolsa modelItem = (ModelItemOrdensMegaBolsa)grdOrdens.SelectedItem;
                if (modelItem.PercentualReducaoAcrescimo != textUpdatePercentualReducaoAcrescim.Value)
                {
                    this.ValidarPercentualreducaoAcrescimoOrdemMegaBolsa(textUpdatePercentualReducaoAcrescim);
                    modelItem.PercentualReducaoAcrescimo = textUpdatePercentualReducaoAcrescim.Value;
                    
                }
            }
        }

        private void ValidarPercentualreducaoAcrescimoOrdemMegaBolsa(SinacorDecimalTextBox textUpdatePercentualReducaoAcrescim)
        {

                ModelItemOrdensMegaBolsa selectedItem = (ModelItemOrdensMegaBolsa)grdOrdens.SelectedItem;

                bool blnValidar = this.presenter.ValidarPercentualReducaoAcrescimoOrdemMegaBolsa(textUpdatePercentualReducaoAcrescim.Value, selectedItem);
                if (!blnValidar)
                    textUpdatePercentualReducaoAcrescim.Text = selectedItem.PercentualReducaoAcrescimo.Value.ToString();

        }


        private void btnNovaBusca_Click(object sender, RoutedEventArgs e)
        {
            this.ClearServiceErrors();
            this.NovaBusca();
        }

        private void grdOrdens_ApplyingStyle(object sender, ApplyStyleEventArgs e)
        {
            if (e.ItemInfo != null)
            {
                if (e.OriginalSource is BaseRow)
                {
                    e.Style = RetornarBusinessColor(((Model.ModelItemOrdensMegaBolsa)e.ItemInfo.Item).TipoSituacaoCasamentoOrdem);
                }
            }
        }

        private string RetornarBusinessColor(EnumWrapper<TipoSituacaoOrdem> tipoSituacao)
        {
            string _style = string.Empty;

            switch (tipoSituacao.Value)
            {
                case TipoSituacaoOrdem.Casadas:
                    _style = BaseRow.GridRowBusiness01;
                    break;
                case TipoSituacaoOrdem.NaoCasadas:
                    _style = BaseRow.GridRowBusiness06;
                    break;
                case TipoSituacaoOrdem.CasadasParte:
                    _style = BaseRow.GridRowBusiness04;
                    break;
                case TipoSituacaoOrdem.ExecutadasSemClientes:
                    _style = BaseRow.GridRowBusiness08;
                    break;
                case TipoSituacaoOrdem.Todas:
                    _style = BaseRow.GridRowBusiness07;
                    break;
                default:
                    _style = BaseRow.GridRowBusiness07;
                    break;
            }

            return _style;
        }

        private void grdOrdens_UpdateEnded(object sender, ItemEventArgs e)
        {
            this.grdOrdens.SaveAll();
            this.presenter.CarregarOrdemMegaBolsa(this._model);
        }

        private void grdOrdens_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            this.ClearServiceErrors();
            this.CarregaPreBoletoAnalitico(this._model);
        }

        /// <summary>
        /// Váriavel auxiliar para preencher estilo
        /// </summary>
        private string _style1 = string.Empty;

        private void grdPreBoletos_ApplyingStyle(object sender, ApplyStyleEventArgs e)
        {
            if (e.ItemInfo.Item != null)
            {
                // Limpando style
                _style1 = string.Empty;

                if (e.OriginalSource is BaseRow)
                {
                    // BaseRow para estilos de linha
                    if (((Model.CasamentoPreBoleto)e.ItemInfo.Item).TipoSituacaoCasamento != null)
                    {
                        
                        this.presenter.InformarStatusPreBoleto((Model.Enum.TipoSituacaoCasamento)((Model.CasamentoPreBoleto)e.ItemInfo.Item).TipoSituacaoCasamento);
                    }

                }              
                // Retornando style
                e.Style = _style1;
            }
        }

        public void InformarCasadas()
        {
            _style1 = BaseRow.GridRowBusiness01;
        }

        public void InformarNaoCasadas()
        {
            _style1 = BaseRow.GridRowBusiness06;
        }

        public void InformarCasadasParte()
        {
            _style1 = BaseRow.GridRowBusiness04;
        }

    }
}
